# 基类
# 多边形类 : 基类 父类
class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides # 边数
        self.sides = [0 for i in range(no_of_sides)] # 具体的边长组成的列表

    # 获取多边形的边长
    def inputSides(self):
        self.sides = [float(input("输入边长 "+str(i+1)+" : ")) for i in range(self.n)]

    # 展示多边形的边长
    def dispSides(self):
        for i in range(self.n):
            print("边长",i+1,"是",self.sides[i])


# p = Polygon(4)
# print(p.__dict__)
#
# # 获取多边形的边长
# p.inputSides()
# print(p.__dict__)
#
# p.dispSides()

# 属性的继承要显示的调用父类的__init__函数(构造函数)  方法自动继承
# 三角形类: 派生类 子类
class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

    # 计算三角形的面积
    def findArea(self):
        a, b, c = self.sides
        # 计算半周长
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('三角形的面积是 %0.2f' %area)

# t = Triangle()
# print(t.__dict__)
#
# t.inputSides()
# t.dispSides()
# t.findArea()

# 多重继承
# 多级继承

# object类:
# Python中的每个类都派生自object。它是Python中最基本的类型。
# 因此，从技术上讲，所有其他类（内置的或自己定义的）都是派生类，
# python中的所有对象都是object类的实例。
t = Triangle()
print(t.__hash__)